Side Stories - Putting it all together
My intentions for this page are to explain through example every aspect of a side story and how they are used. I will include documentation along the way so every command will explain what it's doing (at least the first time) and how it is used. Please do not edit this page, I'll get to it on a fairly regular basis. I started writing in here right away without actually planning it out... caused a few problems as I started going through it in my head... So, I'm currently writing the actual Side Story - on the side - and will update here as I get it working properly... Ideally, I'll have a downloadable version available before it's completed here... Battles and Battle Structure is a little more complicated than I'd originally thought, at least to map everything 'perfectly'. So this is going to take a while... I'm currently working on a battle section which can be found at Side Stories - Battle Commands and will update from there. That said, the current story outline is going to be changed somewhat to make it fit a little better... I will update it here shortly so as to make it work; however it's going to be a bit of time before the story is completed. I'm currently debating how I'm going to add the separate files (since it's done with restart,path\subpath to control all the fight situations, really holding them all on one page is too much; so using separate pages has so far been the only option I've found that really works. Though, doing it that way will create a whole bunch of very redundant pages. I don't feel the wiki needs those... Any suggestions would be wonderful; thanks. :) ... battle writing takes a long time... ... I was hoping it'd be a bit faster than this, though... I guess I'm still trying to figure out every possible action from within a battle... will speed up when I finish documenting it I guess... does look promising though... :) ... Alright, so far Slime Girl is undefeated in my tests... I've not tested a whole lot, but I set Luka to level 50, level 99, every time he hits her it does 0 damage... Anyway, will keep looking, clearly I'm doing something wrong. Either that or I really have to use flail wildly... :-? Slime Girl fight is working fine, though I don't have all her attacks down... not really sure how to get the recombine to work, so will try that for a little longer... anyway, little bit longer... Description 27/04/2014 Alright, so I've been working on a monsterpedia file, as well as a side story editor. Some of you may wonder, why bother with the side story editor? Since side stories are so limited in what you can do with them. Other's may wonder, why work on a monsterpedia? there's one in the game..? Well, I'll answer both of those questions here... Though, they are unrelated to the purpose of this page. So you can read them if you'd like, or you can proceed below them to the actual content of this page. 'Side Stories / Side Story Editor' When I first came to the Monster Girl Quest Wiki, I had no idea about the limitations of Side Stories, I felt that creating a Side Story editor would be awesome! Then looking at the previously documented commands that you can use in a Side Story, I realized just how limited they were. My first reaction was - why bother making a side story editor? Then I thought, well people still make side stories, I can make it easier to do that, fairly easily since they're so limited... Then I thought, well... there are commands in some side stories that I've never heard of, and that I didn't understand how they worked. So I started doing research into the Monster Laboritory and discovered a bunch of new commands, figured out how they worked, then documented them in the 'making a side story' section of this page. Now I realize that a Side Story, though still inherently limited, can be quite elaborate, so an editor is something that could be a great tool for side story creators to both assist them in Side Story developement, as well as showing them just how far they can take their stories. 'Monsterpedia' Creating a monsterpedia isn't so much about seeing all the graphics in the game, it's more about knowing what's available. The monsterpedia is meant for side story developers as well as people making a repatch, to show all the different graphics in the game, their filenames, and who they relate to specifically. Originally I had intended to create a monsterpedia that was limited to each individual monster entry, though early on I realized that there were some issues with doing that. Not all graphics are actually referenced in battle, and beyond that, extracting specific graphic to battle information is a very lengthy process. Anyway, not going to happen. I refuse. Instead, I've created a monster specific graphic list. This is not monster / fight specific, but monster specific. For instance, Granberia has multiple entries, though each entry references all of Granberia's graphics. This is the first test that I did with splitting them up on a fight specific basis. Granberia has 2 images that aren't referenced in battle, they are instead referenced later on in the Monster Lord's castle, during a non-battle scene. Not very useful to have undocumented images. Anyway, that's why we need a monsterpedia, so that people creating can have an actual image list that's already been broken down in a character specific way. Putting it all together What I've decided to do in the interm, is create a Side Story, without an editor. The purpose of this side story is to show how everything that you can use in a side story is actually used. Hopefully I'll find a good reason to use the four remaining undocumented commands in side story developement somewhere in here... The creation of this Side Story will not be done privately however, instead I'm going to create it here, on the site. I will document the use of every command (at least the first time I use the command) and explain what they're doing as well as how they work. Hence, Putting it all together... The Story I've decided to create a Side Story that takes place in the coliseum. In it, Luka will battle every creature within the game. Winning a battle will award Luka a bonus, losing a battle will allow him to retry, though he will not recieve a bonus for the battle's completion. As a side story developer, you can go through to the individual sections (which will be linked somewhere on here) for each monster to see their specific image list. That's the plan... We'll see how it goes... '' pre-story notes ... '' '' all variable use is being remapped, I'm having issues with the battle development as, well - it's just slightly more problematic than I'd assumed it would be. I've decided that viewing the 'extra' moves with points earned isn't exactly a valid option, as tracking this over a number of monsters becomes problematic with limited variable use.'' as such, all images and moves will be available to the user after they battle set character... at least, that's the plan... battle control is a little more problematic than I'd originally thought, the battles will not be exactly as they were in the original game, which is fine because they all take place in the Coliseum anyway, so they're not supposed to be exactly the same... doesn't matter, I'm getting to it... the first battle I'll be posting (001_SlimeGirl) will contain a fairly basic battle tutorial, as the battle's become more advanced, well... yeah... so will the tutorials I guess... :much of the structuring of this story was rewritten to ensure it worked proper... :the bottom section will be returned when it's ready... presently it's structure is wrong... 'Setting' :setting -> title= :setting : the setting section of your story holds only one important bit of information... the title... nothing else is loaded from here... : because nothing else is loaded from here, it's a great place to put notes about your side story for people to read when looking through it... :title = "Luka vs The Colosseum" : this is the title of your story (well my story)... it will appear in Monster Girl Quest under the Extras menu after selecting 'Spin-Off Stories'. : Please note that you'll need to add your story folder to the list.ini file in the mod folder. :setting :title="Luka vs The Colosseum" :notes: :: This side story is being developed / was developed to assist others in learning how to create Side Stories of their own. As I write this story, I will document every new command as I come to them. It is an ongoing tutorial, feel free to ask a question if you have one. 'intro' :bg :0 = "bg,bg043,10,1500 " :the bg command allows you to change the current background image... it's made up of 4 parts... :* bg - the command :* bg043 - the background I'm selecting :** bg043 is a stock background that is included in the game, hence no extension... :** if you were to use a custom background image, you'd have to include it's extension and path (bg.png if it's in your side story folder, any deeper and you need to include the folder paths...) :*10 - the transition you're using :*1500 - transition duration in ms (1000ms = 1 second) :more information :0 = "bg,bg043,10,1500 " :name :1 = "name,Leprichaun " : The namme command is very straight forward. It's made out of 2 parts, though the second is optional. :* name - the command :* Leprichaun - the name : Important things to remember about the name command is a trailing space after the name... : Other than that, it's important to know that sometimes you must use the name command without a name or comma, will explain that when I get to that point in the story. :1 = "name,Leprichaun " :No Command :When there's no command, what you're writing is text / speach. It is said by whoever is currently referenced as the speaker with the name command... good stuffs... :2 = "Well, Luka... I'm sending you to the Colosseum as an example... " :3 = "To show writers how they can create their own stories. " :4 = "as well as a reference specific monster girls from all over this world. " :5 = "name,Luka " :6 = "Reference monster girls? " :7 = "For what? What do you mean? " :8 = "name,Leprichaun " :9 = "... Alright, so you're not going to remember this anymore... but this... " :10 = "... this is a game, Luka... and the writer's need to access images... " :11 = "or their stories don't work... " :12 = "name,Luka " :13 = "A game? what do you mean a game? You're not playing with me! " :flash :14 = "flash,250,500" :the flash command is made up of 3 parts, and causes the screen to 'flash' from it's present state to solid white then back again... :*flash - the command :*250 - flash in duration in ms (time it takes to reach full brightness) :*500 - flash out duration in ms (time it takes to return to the normal display) :more information :14 = "flash,250,500 " :15 = "name,Leprichaun " :16 = "Anyway, it's time for you to fight Luka, I've set your level back to 1. " :17 = "You will get stronger after every fight, so don't wory... " :18 = "Ontop of that, you will be awarded points for every new attack that hits you. " :19 = "You can use those points later to view different attacks, if you wish. " :20 = "name,Luka " :21 = "..? wha..? what happened..? The colosseum? How'd we get here..? " :22 = "name,Leprichaun " :23 = "what? You don't remember..? " :24 = "We left the castle days ago on our great journey to the colosseum... some BIG plan you had, it was wonderful, blah blah blah! and you don't even remember it!? " :25 = "That's horrible! I could be back at the castle right now ... working... with that lovely little imp girl... but noooo... i had to come here with you! " :26 = "you don't even remember why we're here!? " :27 = "name,Luka " :28 = "uh... well... I'm sure it must be something important... If I was going to take you away from your time with the 'imp girl' ... pervert... " :29 = "name,Leprichaun " :30 = "Luka! I'm kidding, sheesh... you really don't remember, do you? The imp girl and I have never really gotten along... " :31 = "name,Luka " :32 = "no, I really don't remember... " :33 = "name,Leprichaun " :34 = "Well, we'ere here to help train the various gods across the relm in scripting their own stories..." :35 = "so they can control you, as well as others, and initiate battles against every monster girl in the world! " :36 = "name,Luka " :37 = "..? what? wait, why would I want to do that? " :38 = "What gods? what are you talking about!? What about the Goddess, Illias? isn't she the only 'god'? " :39 = "What's going on here!? Why are we..." :40 = "flash,250,500" :41 = "name,Leprichaun " :42 = "Well Luka, we've finally arrived at the colosseum... It's been a long trip, but we're here... " :43 = "name,Luka " :44 = "The Colosseum..? what are we doing here? " :45 = "name,Leprichaun " :46 = "Oh Luka, you're a funny one... we're here because you wanted to be here, and I agreed to come with you... " :47 = "name,Luka " :48 = "uh... alright... ... I guess we should just head in then... " :var_ld :49 = "var_ld,v0,1" :var_ld is a 3 part command :* var_ld - the command :* v0 - the variable to load data into (v0 through v9 are available in side stories) :* 1 - the value we're loading into v0... :more information :49 = "var_ld,v0,1" :goto :50 = "goto,story" :goto is a very straight forward 2 part command... goto, where... :* goto - the command :* story - the target story :the specified target must exist and must be spelled exactly the same way... :50 = "goto,story" :end :51 = "end" :the end command ends the story... pretty straight forward... :it's important to end every section of your story with an end command though, because if you make it to the end of a section without jumping somewhere else, it's gonna crash... :51 = "end" 'story' :var_cpa :0 = "var_cpa,v0,=,0,0" :the var_cpa command has 5 parts :* var_cpa - the command :* v0 - the variable we're testing :* = - what comparison we're doing :* 0 - we're checking if it's equal to 0 :* 0 - sets a flag if the comparison is true : more information :0 = "var_cpa,v0,=,0,0" :var_jump :1 = "var_jump,intro" :var_jump has 2 parts and is very similar to a goto statement... but it's a conditional goto statement, advanced usage (sort of) of var_jump will be shown later in the story. :* var_jump - the command :* intro - the target intro :more information :1 = "var_jump,intro" :2 = "name,Luka " :3 = "... alright, what's next..? " :Select :4 = "select,Let's Fight! ,doBattle,Consession Stand,doPics,The Announcer,doAnnouncer,Go Home,doExit" :The select command can have up to 9 parts... though I'm only going to explain the first 3... :* select - the command :* Let's Fight! - caption of the first button :* doBattle - target doBattle : part 2 and 3 of this repeat for additional buttons, you can have up to 4... : this is a choice based goto statement, the user selects which button to press, thus which destination to take. also pretty cool... : because it's like a goto statement, the same rules apply to it that apply to a goto statement... the target MUST exist... :more information :4 = "select,Lets Fight! ,doBattle,Consession Stand,doPics,The Announcer,doAnnouncer,Go Home,doExit" :5 = "end" 'doBattle' :var_cpa / var_jump group :Alright, so you've seen both var_cpa and var_jump... but this is how you can use it to customize your story's playability... :0 = "var_cpa,v1,=,0,0" :1 = "var_jump,group0" :2 = "var_cpa,v1,=,1,0" :3 = "var_jump,group1" :4 = "var_cpa,v1,=,2,0" :etc :By combining a bunch of var_cpa and var_jump sets together, we can determine the next section of the story while using the same sub/chapter over and over again. :This is critical if you're using multiple story.ini files because when you jump back to the main one, it always starts from the beginning... You've got to set it up so that your story both knows where it's been already, and for better user interaction, where it's come from... :creating a list like this is a great way to do that... for more information, look at the monsterpedia side story that I'm hoping to have posted in the side stories section fairly soon... :0 = "var_cpa,v1,=,0,0" :1 = "var_jump,group1" :2 = "var_cpa,v1,=,1,0" :3 = "var_jump,group2" :4 = "var_cpa,v1,=,2,0" :5 = "var_jump,group3" :6 = "var_cpa,v1,=,3,0" :7 = "var_jump,group4" :8 = "var_cpa,v1,=,4,0" :9 = "var_jump,group5" :10 = "var_cpa,v1,=,5,0" :11 = "var_jump,group6" :12 = "var_cpa,v1,0,6,0" :13 = "var_jump,group7" :14 = "var_cpa,v1,0,7,0" :15 = "var_jump,group8" :16 = "var_cpa,v1,0,8,0" :17 = "var_jump,group9" :18 = "var_cpa,v1,0,9,0" :19 = "var_jump,group10" :20 = "end" 'groupComplete' :0 = "name,Announcer " :var_out :1 = "var_out,Luka! Good job so far... you've made it past group ,v1,! @That's great! @" :var_out is made up of 4 parts and allows you to display the contents of a variable. :* var_out - the command :* string1 - some text... can be whatever you want, but no commas... :* v1 - the variable we're going to display (v0 to v9 are available) :* string2 - some more text... can be whatever you want, still no commas... :more information :1 = "var_out,Luka! Good job so far... you've made it past group ,v1,! @That's great! @" :var_cal :2 = "var_cal,v1,+,1,1" :var_cal allows you to change variables, either with numbers that you script of the contents of other variables... :the trailing 1 (or 0) sets weather a flag is set or not. the flag can be used for var_jump, so if you're not planning on doing a jump with it, set it to 1... :*var_cal - the command :*v1 - the variable we're modifying.... :*+ - the opperation we're using... :*1 - we're adding 1 to it... (could use a variable instead, v2 for instance) :*1 - the flag... 0 = set a flag, 1 = don't set a flag... :more information :2 = "var_cal,v1,+,1,1" :3 = "var_out,Now you're being moved into group ,v1,... keep at it! " :4 = "goto,doBattle" :5 = "end" 'group1' :0 = "var_cpa,v0,>=13,0" :1 = "var_jump,groupComplete" :2 = "var_cpa,v0,=,1,0" :3 = "var_jump,001_SlimeGirl" :4 = "var_cpa,v0,=,2,0" :5 = "var_jump,002_SlugGirl" :6 = "var_cpa,v0,=,3,0" :7 = "var_jump,003_Mandragora" :8 = "var_cpa,v0,=,4,0" :9 = "var_jump,004_EarthwormGirl" :10 = "var_cpa,v0,=,5,0" :11 = "var_jump,005_GoblinGirl" :12 = "var_cpa,v0,=,6,0" :13 = "var_jump,006_TinyLamia" :14 = "var_cpa,v0,=,7,0" :15 = "var_jump,007_VampireGirl" :16 = "var_cpa,v0,=,8,0" :17 = "var_jump,008_DragonPup" :18 = "var_cpa,v0,0,9,0" :19 = "var_jump,009_BeeGirl" :20 = "var_cpa,v0,=,10,0" :21 = "var_jump,010_Harpy" :22 = "var_cpa,v0,=,11,0" :23 = "var_jump,011_HarpyTwins" :24 = "var_cpa,v0,=,12,0" :25 = "var_jump,012_QueenHarpy" :26 = "var_cpa,v0,>=13,0" :27 = "var_jump,group1" '001_SlimeGirl' :notes :this is the first battle for this side story, and I have a few ideas about how to create the page now using fixed height scrollable divs... :unfortunately, I'm not entirely sure it's going to work (i'm not even partially sure it's going to work really... it doesn't seem to do much in the preview window... though it did add another scrollbar, just no where near the specified size...) :so, that's my plan, using scrollable divs... otherwise the page is going to be very very long and hard to follow... if it doesn't work, will have to find another way I guess... :1 = "name,Announcer " :2 = "Hey, Luka! Glad you came by, we've got one hell of a schedule for you, so lets get started. " :3 = "First off, you're up against the Slime Girl that you met at the very start of your epic journey " :4 = "Good luck, remember, you're back to level 1 just like she is... " :sp :5 = "sp,2,angersword,0,0,10,1000 " : this one's a little more complicated. :* sp - the command :* 2 - this can be set between 0 and 9, higher layers overlap lower ones... :* angersword - the filename, like bg it can be your own or one from the game :* 0 - the x offset, can be positive or negative - offset is from the center of the screen, and positions from the center of the image. :* 0 - the y offset, can be positive or negative - offset is from the center of the screen, and positions from the center of the image. :* 10 - the same as they are in bg :* 1000 - the same as in bg as well, done in ms - 1000 = 1 second. : more information :5 = "sp,2,angersword,0,0,10,1000 " :sp_del :6 = "sp_del,2,10,1000" :the sp_del command has some of the same settings as the sp command... and you'll need to remember what you set up to use it properly... :*sp_del - the command :* 2 - the layer :* 10 - the transition :* 1000 - transition time (for deletion) :more information :6 = "sp_del,2,10,1000 " :7 = "Get ready, let the action begin! " :8 = "var_ld,v2,1" :restart :9 = "restart,LukaVsAll\001_SlimeGirl" :The restart command loads a side story... :Using it from within a side story allows you to do all sorts of fun things... primarily, having more than one battle in your side story! :When you list the path to restart, the base is the mod folder, so you must include the name of your side stories folder as well as the sub story's sub folder. When in the sub story, the paths are done the normal way, so no path means the sub story's folder. :Your sub story is set up the same way as a side story, so must contain the story.ini file as well as all graphics / etc relivent to it. :* restart - the command :* LukaVsAll\001_SlimeGirl - the path information to story.ini :9 = "restart,LukaVsAll\001_SlimeGirl" :10 = "end" '002_SlugGirl' :0 = "name,Announcer " :1 = "Congratulations on your first battle Luka... Though, I'm sure the crowd expected to see your victory there... Especially since we limited her abilities... " :2 = "name,Luka " :3 = "Limited her abilities? ... yeah, it did seem a little easier than last time I guess... " :4 = "name,Announcer " :5 = "Oh... uh... sorry to burst your bubble there Luka... Yeah, you may have noticed the lack of recombines she loves so much... Anyway, Slug Girl's got some restrictions too! " :6 = "name,Luka " :7 = "um... good..? " :8 = "name,Announcer " :9 = "Yes... It is good Luka... you're not allowed to throw salt around in the arena here... Or did you forget..? " :10 = "name,Luka " :11 = "can... you keep it down a bit..? That's not something I want to spread around... " :12 = "name,Announcer " :13 = "Ha, don't worry... we're not in out on the stage yet, and my mic is off... now... for the battle! " :14 = "bg,bg084,10,1000 " :15 = "Ladies and Gentlemen! Returning to the arena for his second consecutive battle, Luka!!! " :16 = "name,Crowd " :17 = "yay! Go Luka!!! yeah! You can do it Luka!!! woohooo!!! Go Monster Girls!!! " :18 = "name,Announcer " :19 = "um... yeah... anyway, he's up against the Slug Girl! Here it comes, at you live from the Colosseum..." :20 = "restart,LukaVsAll\002_SlugGirl" :21 = "end" 'images and stuff' :This section is for image reference. It will list all images for each monster available within the game. The script to deal with each individual monstergirl is listed within their sub\story.ini file to keep things a little more organized. When switching to pics mode, v9 is set to 1 then the section is called (Slime Girl would be "var_ld,v9,1" followed by "restart,LukaVsAll,001_SlimeGirl") :This section is still somewhat being hammered out, though there's nothing wrong with a starting point. :doPics :0 = "var_cpa,v0,=,1,0" :1 = "var_jump,noPics" :2 = "var_cpa,v0,>=,2,0" :3 = "var_jump,getPics" :4 = "end" :notes: noPics - need to add images for background change and a vender character... will get to that later... :noPics :0 = "name,Vender " :1 = "Hello... and welcome to my shop! " :2 = "Though I sell images from the days events within the colosseum, there haven't been any yet today so... nothing is for sale... " :3 = "Please check back later, maybe after this alleged 'hero' shows up and starts to fight... " :4 = "name,Luka " :5 = "... um... alright..? " :6 = "You know who I am, right? " :7 = "name,Vender " :8 = "Of course! You're a potential customer, please come back later and check out my wares... " :9 = "name,Luka " :10 = "Um... no, I'm L... " :11 = "name,Vender " :12 = "Thank you, come again... " :13 = "goto,story " :14 = "end" :notes: getPics - need to add images for background change and a vender character... will get to that later... :getPics :0 = "name,Vender " :1 = "Hello, welcome to my shop! " :2 = "... OH! It's you! Welcome welcome, our hero in my shop! This is wonderful! " :3 = "name,Luka " :4 = "um... I guess..? " :5 = "name,Vender " :6 = "It is, it is! Wonderful! No charge for you to look, if you want to take something home though, maybe we can work something out... You sign a few, maybe you keep a copy for yourself? no charge? " :7 = "name,Luka " :8 = "maybe..? if you think that's alright..? " :9 = "name,Vender " :10 = "Excellent choice my friend, why not take a look through my selection of images! " :11 = "goto,photoBook " :12 = "end" '''personal notes :This section has nothing to do with the story itself... it's more about keeping track of things for yourself... putting it at the top is good, but it works at the bottom too since you'll be scrolling further and further down as the story goes on... :I like to keep track of backgrounds I'm using, music, etc just so that I can reference whichever background I was using without having to double check over and over again each instance it reappears... :bg043 - using this for the entrance to the colosseum :bg084 - this is the colosseum picture that i'll be using mostly... :though it's a good thing to do to keep track of it for yourself, you probably shouldn't leave it there when you actually 'publish' your story... 'NOTES' Category:Side Stories Category:Tutorial Category:Quick Reference Category:Battles Category:Battle Creation